#ifndef STACK_H
#define STACK_H

// 栈节点结构体
typedef struct StackNode {
    void* data;              //  
    struct StackNode* next;  // 下一节点指针
} StackNode;

// 栈结构体
typedef struct {
    StackNode* top;          // 栈顶指针
    int size;               // 栈大小
    int dataSize;           // 数据类型大小（字节数）
} Stack;

// 栈操作函数
void stack_init(Stack* stack, int dataSize);         // 初始化栈
void stack_clear(Stack* stack);                      // 清空栈
void stack_destroy(Stack* stack);                    // 销毁栈
int stack_size(Stack* stack);                       // 获取栈大小
int stack_is_empty(Stack* stack);                   // 判断栈是否为空

// 数据操作函数
void stack_push(Stack* stack, void* data);          // 入栈
void stack_pop(Stack* stack);                       // 出栈
void* stack_top(Stack* stack);                      // 获取栈顶元素

// 遍历函数
void stack_foreach(Stack* stack, void (*func)(void*)); // 遍历栈（从栈顶到栈底）

#endif 
